package com.example.syd.coolweather;

import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.os.Build;
import android.preference.PreferenceManager;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ScrollView;
import android.widget.TextView;
import android.widget.Toast;

import com.bumptech.glide.Glide;
import com.example.syd.coolweather.gson.Forecast;
import com.example.syd.coolweather.gson.Weather;
import com.example.syd.coolweather.service.AutoUpdateService;
import com.example.syd.coolweather.util.HttpUtil;
import com.example.syd.coolweather.util.Utility;

import org.w3c.dom.Text;

import java.io.IOException;
import java.security.Key;
import java.security.PrivateKey;

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Response;

public class WeatherActivity extends AppCompatActivity {

    private ScrollView weatherLayout;
    private TextView titleCity;
    private TextView titleUpdateTime;
    private TextView degreeText;
    private TextView weatherInfoText;
    private LinearLayout forecastLayout;
    private TextView aqiText;
    private TextView pm25Text;
    private TextView comfortText;
    private TextView carWashView;
    private TextView sportView;
    //背景图
    private ImageView bingPicImg;
    //刷新
    public SwipeRefreshLayout swipeRefreshLayout;
    /*侧滑*/
    private Button nav_button;
    public DrawerLayout drawerLayout;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_weather);

        drawerLayout = (DrawerLayout)findViewById(R.id.drawer_layout);
        nav_button = (Button)findViewById(R.id.nav_button);
        nav_button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
               drawerLayout.openDrawer(GravityCompat.START);
            }
        });
        /*背景图*/
        if (Build.VERSION.SDK_INT >= 21){
            View decorView = getWindow().getDecorView();
            decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                    |View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
            getWindow().setStatusBarColor(Color.TRANSPARENT);

        }
        //初始化控件
        weatherLayout = (ScrollView) findViewById(R.id.weather_layout);
        titleCity = (TextView)findViewById(R.id.title_city);
        titleUpdateTime = (TextView)findViewById(R.id.title_update_time);
        degreeText = (TextView)findViewById(R.id.degree_text);
        weatherInfoText = (TextView)findViewById(R.id.weather_info_text);
        forecastLayout = (LinearLayout)findViewById(R.id.forecast_layout);
        aqiText = (TextView)findViewById(R.id.aqi_text);
        pm25Text = (TextView)findViewById(R.id.pm25_text);
        comfortText = (TextView)findViewById(R.id.comfort_text);
        carWashView = (TextView)findViewById(R.id.car_wash_text);
        sportView = (TextView)findViewById(R.id.sport_text);

        /*刷新*/
        swipeRefreshLayout = (SwipeRefreshLayout)findViewById(R.id.swipe_refresh);
        swipeRefreshLayout.setColorSchemeResources(R.color.colorPrimary);

        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
        String weatherString = preferences.getString("weather",null);
        final String weatherId;
        if (weatherString != null){
            /*有缓存直接解析天气数据*/
            Weather weather = Utility.handleWeatherResponse(weatherString);
            weatherId = weather.basic.weatherId;
            showWeatherInfo(weather);
        }else {
            //无缓存去服务器查询天气
            weatherId = getIntent().getStringExtra("weather_id");
            weatherLayout.setVisibility(View.INVISIBLE);
            requestWeather(weatherId);
        }
        swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                requestWeather(weatherId);
            }
        });
        /*背景图*/
        bingPicImg = (ImageView)findViewById(R.id.bing_pic_img);
        String bingPic = preferences.getString("bing_pic",null);
        if (bingPic != null){
            Glide.with(this).load(bingPic).into(bingPicImg);
        }else {
            loadBingPic();
        }
    }
    /*加载必应每日一图*/
    public void loadBingPic(){
        String requestBingPic = "http://guolin.tech/api/bing_pic";
        HttpUtil.sendOKHttpRequest(requestBingPic, new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                e.printStackTrace();
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                final String bingPic = response.body().string();
                SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(WeatherActivity.this).edit();
                editor.putString("bing_pic",bingPic);
                editor.apply();
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Glide.with(WeatherActivity.this).load(bingPic).into(bingPicImg);
                    }
                });
            }
        });
    }
    /*根据天气id请求城市天气信息*/
    public void loadImg(final String weatherId){

    }
    /*根据天气id请求天气数据*/
    public void requestWeather(final String weatherId){
        String weatherUrl = "http://guolin.tech/api/weather?cityid=" + weatherId +"&key=bc0418b57b2d4918819d3974ac1285d9";
        HttpUtil.sendOKHttpRequest(weatherUrl, new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                e.printStackTrace();
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Toast.makeText(WeatherActivity.this,"获取天气信息失败",Toast.LENGTH_SHORT).show();
                        swipeRefreshLayout.setRefreshing(false);
                    }

                });
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                    final String responseData = response.body().string();
                    final Weather weather = Utility.handleWeatherResponse(responseData);
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            if (weather != null && "ok".equals(weather.status)){
                                SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(WeatherActivity.this).edit();
                                editor.putString("weather",responseData);
                                editor.apply();
                                showWeatherInfo(weather);
                            }else {
                                Toast.makeText(WeatherActivity.this,"获取天气信息失败",Toast.LENGTH_SHORT).show();
                            }
                            swipeRefreshLayout.setRefreshing(false);
                        }
                    });
            }
        });
        /*加载每日必应图片*/
        loadBingPic();
    }
    /*展示weather 实体数据*/
    public void showWeatherInfo(Weather weather){
       String cityName = weather.basic.cityName;
       String updateTime = weather.basic.update.updateTime.split(" ")[1];
       String degree = weather.now.temperature + "℃";
       String weatherInfo = weather.now.more.info;
       titleCity.setText(cityName);
       titleUpdateTime.setText(updateTime);
       degreeText.setText(degree);
       weatherInfoText.setText(weatherInfo);
       forecastLayout.removeAllViews();
       if (weather != null && "ok".equals(weather.status)){
           for (Forecast forecast:weather.forecastList){
               View view = LayoutInflater.from(this).inflate(R.layout.forecast_item,forecastLayout,false);
               TextView dateText = (TextView)view.findViewById(R.id.data_text);
               TextView infoText = (TextView)view.findViewById(R.id.info_text);
               TextView maxText = (TextView)view.findViewById(R.id.max_text);
               TextView minText = (TextView)view.findViewById(R.id.min_text);
               dateText.setText(forecast.date);
               infoText.setText(forecast.more.info);
               maxText.setText(forecast.temperature.max);
               minText.setText(forecast.temperature.min);

               forecastLayout.addView(view);
           }
           if (weather.aqi != null){
               aqiText.setText(weather.aqi.city.aqi);
               pm25Text.setText(weather.aqi.city.pm25);
           }
           String confort = "舒适度: " + weather.suggestion.comfort.info;
           String carWash = "洗车指数: " + weather.suggestion.carWash.info;
           String sport = "运动指数: " + weather.suggestion.sport.info;
           comfortText.setText(confort);
           carWashView.setText(carWash);
           sportView.setText(sport);
           weatherLayout.setVisibility(View.VISIBLE);
           Intent intent = new Intent(this, AutoUpdateService.class);
           startService(intent);
       }else {
         Toast.makeText(WeatherActivity.this,"获取天气信息失败",Toast.LENGTH_SHORT).show();
       }
    }
}
